package ihm;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

import modele.Cadre;
import modele.Element;

import vue.VueCadre;
import vue.VueElement;


public class VueCadrePanel extends JPanel implements ActionListener {

    @SuppressWarnings("compatibility:-6355807523772430063")
    private static final long serialVersionUID = 1L;
    private transient VueCadre laVueCadre;
    private int LAPSE_TEMPS = 20;//millisecondes;
    private transient Cadre leCadre = null;
    private transient ActionListener taskPerformer = new ActionListener() {

        public void actionPerformed(ActionEvent evt) {

            /*    leCadre.Avancer();
         */Redessiner();

        }
    };
    private Timer bouleTimer = new Timer(LAPSE_TEMPS, taskPerformer);

    public VueCadrePanel() {
        super();
        laVueCadre = null;
    }

    /**
     * 
     * @param leCadre le cadre pour initialiser la vueCadre
     * @return 0 si cadre = null, 1 sinon
     */
    public int SetCadre(Cadre leCadre) {
        if (leCadre == null) {
            return 0;
        } else {
            this.leCadre = leCadre;
            return 1;
        }
    }

    public VueCadre GetVueCadre() {
        return laVueCadre;
    }

    //@Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        if (laVueCadre != null) {
            laVueCadre.Dessiner(g);

        } else {
            // création de la VueCadre ici pour avoir des dimensions valides.
            laVueCadre = new VueCadre(leCadre, this.getWidth(), this.getHeight());
            laVueCadre.Dessiner(g);
        }

    }

    public void actionPerformed(ActionEvent e) {
    }

    public void StartAvancer() {
        bouleTimer.start();
    }

    public void StopAvancer() {
        bouleTimer.stop();
    }

    public void AjouterElement(Element element, int x, int y) {
        if (element == null) {
            return;
        }
        VueElement laVueElement;
        laVueElement = new VueElement(element, laVueCadre, x, y);
        laVueCadre.ajouterVueElement(laVueElement);
        Redessiner();
    }

    public void Redessiner() {
        Graphics g = getGraphics();

        laVueCadre.Dessiner(g);
        update(g);
    }
}